package com.hifar.sso.service;

import com.hifar.sso.model.*;

import java.util.List;

/**
 * SSO认证服务接口
 * 
 * @author system
 * @since 1.0.0
 */
public interface SSOAuthService {
    
    /**
     * 用户认证
     * 
     * @param request 认证请求
     * @return 认证响应
     */
    SSOResponse authenticate(SSORequest request);
    
    /**
     * 生成授权码
     * 
     * @param request 认证请求
     * @return 授权码
     */
    String generateAuthorizationCode(SSORequest request);
    
    /**
     * 通过授权码获取令牌
     * 
     * @param code 授权码
     * @param clientId 客户端ID
     * @param redirectUri 重定向URI
     * @return 令牌信息
     */
    SSOToken getTokenByCode(String code, String clientId, String redirectUri);
    
    /**
     * 刷新令牌
     * 
     * @param refreshToken 刷新令牌
     * @param clientId 客户端ID
     * @return 新的令牌信息
     */
    SSOToken refreshToken(String refreshToken, String clientId);
    
    /**
     * 验证令牌
     * 
     * @param accessToken 访问令牌
     * @return 用户信息
     */
    SSOUser validateToken(String accessToken);
    
    /**
     * 撤销令牌
     * 
     * @param accessToken 访问令牌
     * @return 是否成功
     */
    boolean revokeToken(String accessToken);
    
    /**
     * 单点登出
     * 
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean logout(String userId);
    
    /**
     * 获取用户信息
     * 
     * @param userId 用户ID
     * @return 用户信息
     */
    SSOUser getUserInfo(String userId);
    
    /**
     * 根据用户ID获取用户信息
     * 
     * @param userId 用户ID
     * @return 用户信息
     */
    SSOUser getUserById(String userId);
    
    /**
     * 获取用户权限
     * 
     * @param userId 用户ID
     * @return 权限列表
     */
    List<String> getUserPermissions(String userId);
    
    /**
     * 获取用户角色
     * 
     * @param userId 用户ID
     * @return 角色列表
     */
    List<String> getUserRoles(String userId);
}
